package com.dxf.chepter04

/**
 * java 构造器 构造方法 可重载
 *
 * 如果没有定义构造器方法,系统会自动生成一个默认无参构造器
 *
 * 一旦定义了自己的构造器,默认的方法就被覆盖了
 *
 *
 * ==============================================
 *
 * scala构造器也支持重载
 *
 * 主构造器 和 辅助构造器
 *
 * class 类名(形参列表){ //主构造器
 *
 * }
 *
 *
 * def this(形参列表){//辅助构造器,可以有多个
 *
 * }
 *
 *
 * scala构造器特点:
 * 1 构造器无返回值,用来初始化属性
 * 2 主构造器声明直接放置于类名之后(反编译)
 * 3 主构造器会执行类定义中的所有语句
 * 4 如果主构造器无参数,小括号可以省略,构建对象时的小括号也可以省略
 * 5 辅助构造器名称 this (和java不一样),多个辅助构造器通过不用参数列表进行区分,底层就是java的重载
 * 6 辅助构造器必须在第一行显示调用主构造器
 *
 */
object T45_辅助构造器为什么要调用主构造器 {
  def main(args: Array[String]): Unit = {

    // val a= new A// new A--> 调用A的主构造器 --> 调用B的主构造器 --> 打印
    val a2 = new A("x") // new A("x") -->调用A的辅助构造器 --> 调用B的主构造器 -->打印B -->打印A


  }


}

class B {
  println("b~~")
}

class A extends B {

  def this(name: String) {
    this //调用A父类的主构造器 super
    // 调用A的主构造器
    // 调用A的辅助构造器
    println("A~~~")
  }

}

